//Внутренняя библиотека.
#include "switchfilter.h"


//===========================================================================//
//=Заголовок: SwitchFilter::SwitchFilter() - public
//=Параметры:
//=Описание: Конструктор.
//===========================================================================//
SwitchFilter::SwitchFilter(int index, QObject *parent) : VidFilter(index, parent)
{filter = NULL;}


//===========================================================================//
//=Заголовок: bool SwitchFilter::addFilter() - public
//=Параметры:
//=Описание: Функция добавления фильтра в хэш.
//===========================================================================//
bool SwitchFilter::addFilter(VidFilter::TYPE type)
{
switch(type)
	{
	case MOTION: break;
	case FILEWRITER: break;
	default: return false;
}

return true;
}


//===========================================================================//
//=Заголовок: bool SwitchFilter::deleteFilter() - public
//=Параметры:
//=Описание: Функция удаления фильтра из хэша.
//===========================================================================//
bool SwitchFilter::deleteFilter(VidFilter::TYPE type)
{
if(!filtersHash.contains(type)) return false;
if(!disconnectFilter(filtersHash.value(type))) return false;
delete filtersHash.take(type);
return true;
}


//===========================================================================//
//=Заголовок: void SwitchFilter::setNextFilter() - public
//=Параметры:
//=Описание: Функция установки следующего фильтра текущим фильтром.
//===========================================================================//
void SwitchFilter::setNextFilter()
{
if(!filter) return;
if(filtersHash.isEmpty()) return;

QHashIterator<int, VidFilter *> i(filtersHash);
while(i.hasNext())
	{
	i.next();
	if(i.key() == filter->getType())
		{
		if(i.hasNext()) {i.next(); filter = i.value(); return;}
		else break;
	}
}

i.toFront();
if(i.hasNext()) {i.next(); filter = i.value();}
}


//===========================================================================//
//=Заголовок: void SwitchFilter::setPreviousFilter() - public
//=Параметры:
//=Описание: Функция установки предыдущего фильтра текущим фильтром.
//===========================================================================//
void SwitchFilter::setPreviousFilter()
{
if(!filter) return;
if(filtersHash.isEmpty()) return;

QHashIterator<int, VidFilter *> i(filtersHash);
while(i.hasPrevious())
	{
	i.previous();
	if(i.key() == filter->getType())
		{
		if(i.hasPrevious()) {i.previous(); filter = i.value(); return;}
		else break;
	}
}

i.toBack();
if(i.hasPrevious()) {i.previous(); filter = i.value();}
}


//===========================================================================//
//=Заголовок: bool SwitchFilter::setCurrentFilter() - public
//=Параметры:
//=Описание: Функция установки фильтра текущим.
//===========================================================================//
bool SwitchFilter::setCurrentFilter(VidFilter::TYPE type)
{
if(!filtersHash.contains(type)) return false;
filter = filtersHash.value(type, NULL);
return true;
}


//===========================================================================//
//=Заголовок: void SwitchFilter::unsetCurrentFilter() - public
//=Параметры:
//=Описание: Функция обнуления текущего фильтра.
//===========================================================================//
void SwitchFilter::unsetCurrentFilter() {filter = NULL;}


//===========================================================================//
//=Заголовок: bool SwitchFilter::getListParam() - public
//=Параметры:
//=Описание: Функция возврата списка значений параметра фильтра.
//===========================================================================//
bool SwitchFilter::getListParam(DevParam::GET_LIST_PARAM param, QHash<int, QVariant> *valhash)
{
if(!filter) return false;
return filter->getListParam(param, valhash);
}


//===========================================================================//
//=Заголовок: bool SwitchFilter::getParam() - public
//=Параметры:
//=Описание: Функция возврата параметра фильтра.
//===========================================================================//
bool SwitchFilter::getParam(DevParam::GET_PARAM param, QVariant *value)
{
if(!filter) return false;
return filter->getParam(param, value);
}


//===========================================================================//
//=Заголовок: bool SwitchFilter::setParam() - public
//=Параметры:
//=Описание: Функция установки параметра фильтра.
//===========================================================================//
bool SwitchFilter::setParam(DevParam::SET_PARAM param, QVariant value)
{
if(!filter) return false;
return filter->setParam(param, value);
}
